//定义一个Vue类
class Vue{
    //定义构造函数
    //options是一个简单的纯粹的JS对象:{}
    //options对象中有一个data配置项
    constructor(options) {
        //获取所有的属性名
        Object.keys(options.data).forEach((propertyName , index) => {
            // console.log(typeof propertyName , propertyName , index)
            let firstChar = propertyName.charAt(0)
            //其实Vue中的代理就是这样实现的,只是做了一下简单的判断
            if(firstChar != '_' &&firstChar != '$'){
                Object.defineProperty(this , propertyName , {
                    //每次 在使用数据的时候 都会进行数据劫持，然后处理之后再返回
                    get(){
                        console.log('get')
                        return '111' + options.data[propertyName]
                    },
                    set(val){
                        options.data[propertyName] = val
                        console.log('set')
                    }
                })
            }
        })

        //获取所有的方法名
        Object.keys(options.methods).forEach((methodName , index) => {
            //给当前的vue实例扩展一个方法
            console.log(methodName , index)
            //this指代的就是当前的vm对象,给当前 的对象扩展一个方法，就能够直接使用了
            this[methodName] = options.methods[methodName]
        })

    }
}